Selasa, 18 November 2025

Membuat Robot Obstacle Avoider 4WD Menggunakan Arduino Uno dan Sensor Ultrasonik

Membuat Robot Obstacle Avoider 4WD Menggunakan Arduino Uno dan Sensor Ultrasonik

By. Iyon manakarra

 

Robot obstacle avoider atau robot penghindar halangan merupakan salah satu proyek paling populer di dunia robotika pemula. Robot ini mampu bergerak secara otomatis dan menghindari objek di depannya menggunakan sensor jarak. Pada artikel ini, kita akan membahas pembuatan Robot Obstacle Avoider 4-Wheel Drive (4WD) lengkap dengan penjelasan komponen, cara kerja, serta analisis program Arduino Uno yang digunakan.


 

1.     Konsep Dasar Robot Obstacle Avoider

Robot obstacle avoider bekerja dengan prinsip sederhana:

  1. Sensor ultrasonik HC-SR04 mendeteksi jarak objek di depan.
  2. Jika ada halangan yang jaraknya kurang dari ambang batas (misalnya < 25 cm), robot akan berhenti.
  3. Servo menggerakkan sensor ke kiri dan kanan untuk mengukur ruang yang lebih bebas.
  4. Robot memilih arah dengan jarak paling besar.
  5. Setelah menentukan arah, robot akan berbelok kemudian melanjutkan perjalanan.

Robot ini sangat cocok sebagai media pembelajaran elektronika, robotika dasar, pemrograman Arduino, dan pengontrolan motor DC.

 

2.     Komponen yang Digunakan

Berikut komponen utama pada proyek robot ini:

  • Arduino Uno sebagai otak utama pemrosesan.
  • Motor Driver L298N untuk mengatur putaran empat motor DC.
  • Motor DC 4 Buah (4WD) untuk sistem penggerak robot.
  • Sensor Ultrasonik HC-SR04 untuk mendeteksi jarak.
  • Servo SG90 untuk menggerakkan sensor ke kiri, depan, dan kanan.
  • Baterai 7.4V / 18650 sebagai sumber daya.
  • Kabel jumper, rangka robot 4WD, dan dudukan servo.

 

3.     Penjelasan Wiring / Koneksi Komponen

a.     HC-SR04 ke Arduino

  • trigPin → Pin 13
  • echoPin → Pin 12

 

b.     Motor Driver L298N

  • IN1 → Pin 6
  • IN2 → Pin 5
  • IN3 → Pin 3
  • IN4 → Pin 4
  • ENA → Pin 8 (PWM)
  • ENB → Pin 9 (PWM)

 

c.      Servo

  • Signal → Pin 11
  • Vcc → 5V
  • GND → GND

 

4.     Cara Kerja Program Arduino

Program ini ditulis untuk mengontrol seluruh sistem robot. Berikut penjelasan bagian utama:

a.     Mengukur Jarak dengan Ultrasonik

int getDistance() {

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);

  distance = duration * 0.034 / 2;

  return distance;

}

Fungsi getDistance() mengirimkan gelombang ultrasonik dan mengukur waktu pantulnya, kemudian dihitung menjadi jarak.

 

b.     Fungsi Kontrol Motor

Program menyediakan beberapa fungsi untuk mengontrol arah gerak robot:

  • moveForward() → maju
  • moveBackward() → mundur
  • turnLeft() → belok kiri
  • turnRight() → belok kanan
  • stopCar() → berhenti

Semua fungsi bekerja dengan mengatur logika HIGH/LOW pada pin motor driver L298N dan memberikan sinyal PWM ke pin ENA & ENB untuk mengatur kecepatan.

 

c.      Algoritma Penghindar Halangan

Logika utama berada di dalam fungsi loop():

  1. Servo diarahkan ke depan (myServo.write(90)).
  2. Robot mengukur jarak halangan di depan.
  3. Jika jarak < 25 cm, robot berhenti.
  4. Servo belok ke kiri → ukur jarak.
  5. Servo belok ke kanan → ukur jarak.
  6. Bandingkan leftDistance dan rightDistance.
  7. Belok ke arah yang lebih aman.
  8. Robot kembali maju.

Inilah inti dari kecerdasan dasar robot penghindar halangan.

 

5.     Kode Program Lengkap

Kode berikut adalah program robot obstacle avoider yang digunakan:

// Design Program by. Iyon Manakarra//Mekatronika Manakarra
#include <Servo.h>

// Pin Definitions
#define trigPin 13
#define echoPin 12
#define ENA 8
#define ENB 9
#define IN1 6
#define IN2 5
#define IN3 3
#define IN4 4
#define servoPin 11

Servo myServo;

// Variables for distance measurement
long duration;
int distance;
int rightDistance, leftDistance;

// Function to calculate distance
int getDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  return distance;
}

// Motor control functions
void moveForward() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  analogWrite(ENA, 250); // Adjust speed using PWM (0-255)
  analogWrite(ENB, 250); // Adjust speed using PWM (0-255)
}

void moveBackward() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  analogWrite(ENA, 250); // Adjust speed using PWM
  analogWrite(ENB, 250); // Adjust speed using PWM
}

void stopCar() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

void turnLeft() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  //analogWrite(ENA, 150); // Adjust speed for turning
  //analogWrite(ENB, 150); // Adjust speed for turning
}

void turnRight() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  //analogWrite(ENA, 150); // Adjust speed for turning
  //analogWrite(ENB, 150); // Adjust speed for turning
}

void setup() {
  // Setup pins
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);

  // Servo setup
  myServo.attach(servoPin);
  myServo.write(90); // Start servo at center position

  Serial.begin(9600);
}

void loop() {
  // Scan forward
  myServo.write(90); // Center position (looking straight ahead)
  delay(50);
  int frontDistance = getDistance();

  // If an obstacle is closer than 20 cm
  if (frontDistance < 25) {
    stopCar();
    delay(200); // Pause to make a decision

    // Scan left side
    myServo.write(0); // Turn servo to the left
    delay(500);
    leftDistance = getDistance();

    // Scan right side
    myServo.write(180); // Turn servo to the right
    delay(500);
    rightDistance = getDistance();

    // Decide direction based on the distances
    if (leftDistance > rightDistance) {
      turnLeft();
      delay(500); // Adjust the delay to control turning duration
    } else {
      turnRight();
      delay(500); // Adjust the delay to control turning duration
    }

    stopCar(); // Stop after turning
    delay(200); // Brief pause before moving forward again
  } else {
    moveForward(); // Continue moving forward if the path is clear
  }

  delay(50); // Short delay before next loop iteration
}

 

6.     Tips Pengembangan Lebih Lanjut

Setelah robot berjalan, Anda dapat meningkatkan performanya dengan:

  • Menambahkan sensor inframerah di samping untuk navigasi lebih tajam.
  • Menambahkan PID untuk gerakan motor lebih stabil.
  • Menggunakan baterai Li-ion agar robot lebih bertenaga.
  • Mengoptimalkan sudut servo (misalnya 60–120 derajat).
  • Menambahkan buzzer sebagai alarm tabrakan.

7.     Kesimpulan

Robot Obstacle Avoider 4WD adalah proyek yang sangat ideal bagi siswa dan hobiis robotika. Dengan kombinasi Arduino Uno, sensor ultrasonik, motor driver, dan algoritma sederhana, robot ini bisa melakukan navigasi otomatis dengan cukup baik. Proyek ini tidak hanya mengajarkan pemrograman tetapi juga konsep sensor, aktuator, dan pengendalian motor.

 

8.     Dokumen Proses Pembuatan

a.     Link Youtube


b.     Galery Design

-  Komponen Robot Avoider

MekatronikaManakarra_KomponenAvoider
Komponen Robot

- Hasil Rakitan Mekanik Robot dan Kontrol Elektronika

 

Tampak Bawah

Tampak samping Kiri

Tampak Samping Kanan





Tidak ada komentar:

Posting Komentar

Mari berdiskusi dan silahkan memberi komentar berupa kritik dan saran yang bersifat membangun ya sobat smua....!